﻿
function Calendario()
{
}

Calendario.prototype =
{

    main: function()
    {    
        var a = 0;
        
        this._atualizaData(parseInt(this.hfAnoInicial.value.toString()), 
                          parseInt(this.hfMesInicial.value), 
                          parseInt(this.hfDiaInicial.value));
    
        this.addHandler(this.tdMesAnterior, "click", this.mesAnterior);
        this.addHandler(this.tdMesPosterior, "click", this.mesPosterior);
        this.addHandler(this.lnkAnoAnterior, "click", this.anoAnterior);
        this.addHandler(this.lnkAnoPosterior, "click", this.anoPosterior);
        this.addHandler(this.lblAno, "click", this._editarAno);
                
        this._renderFolha(this.data);
    },
    
    meses: ["janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"],

    diasFolha: new Array(new Array(), new Array(), new Array(), new Array(), new Array(), new Array(), new Array()),

    _editarAno: function()
    {
        this.divAno.innerHTML = "<input id='inputAno' class='"+this.hfStyleEditarAno.value+"' maxlength='4'><//input>";
        var inputAno = $get("inputAno");
        inputAno.value = this.ano;
        this.addHandler(inputAno, "keyup", this._salvarAno);
        this.addHandler(inputAno, "blur", this._cancelarAno);                
        inputAno.focus();  
        inputAno.select();      
    },

    _salvarAno: function(sender, event)
    {
        if(((event.keyCode >= 48) && (event.keyCode <= 57)))
        {
            if(parseInt(sender.value).toString().length == 4)
            {
                var ano = parseInt(sender.value);            
                this.ano = ano;
                this.divAno.innerHTML = "";
                this.divAno.appendChild(this.lblAno);
                this._atualizaData(this.ano, this.mes, this.dia);                
                this._renderFolha(this.data);
            }
        }
    },
    
    _cancelarAno: function(sender, event)
    {
        this.divAno.innerHTML = "";
        this.divAno.appendChild(this.lblAno);
        this._atualizaData(this.ano, this.mes, this.dia);                
        this._renderFolha(this.data);
    },
    
    irParaData: function(ano, mes, dia)
    {
        this._atualizaData(ano, mes, dia);
        this._renderFolha(this.data);
    },

    _atualizaData: function(ano, mes, dia)
    {
        this.data = new Date(ano, mes, dia);
        this.dia = this.data.getDate();
        this.mes = this.data.getMonth();
        this.ano = this.data.getFullYear();
        this.hfAnoInicial.value = this.ano;
        this.hfMesInicial.value = this.mes;
        this.hfDiaInicial.value = this.dia;
    },
    
    mesAnterior: function()
    {
        this.mes--;        
        this._atualizaData(this.ano, this.mes, this.dia);
        this._renderFolha(this.data);
    },
    
    mesPosterior: function()
    {
      this.mes++;
      this._atualizaData(this.ano, this.mes, this.dia);
      this._renderFolha(this.data);
    },
    
    anoAnterior: function()
    {
        this.ano--;        
        this._atualizaData(this.ano, this.mes, this.dia);
        this._renderFolha(this.data);
    },
    
    anoPosterior: function()
    {
      this.ano++;
      this._atualizaData(this.ano, this.mes, this.dia);
      this._renderFolha(this.data);
    },
    
    _selecionaDataClick: function(sender)
    {
        if(sender.innerText.trim() == "")
            return;        
        var l = sender.l;
        var c = sender.c;
        this._selecionaCelula(l, c);
    },
    
    _selecionaCelula: function(l, c)
    {
        var dia = this.diasFolha[l][c];
        var mes = this.mes;
        var ano = this.ano;
        this.selecionaData(ano, mes, dia, l, c); 
        this._renderFolha(new Date(ano, mes, dia));   
    },
    
    selecionaData: function(ano, mes, dia, _l, _c)
    {
        
        var arDias;
        if(this.hfDiasSelecionados.value.trim() == "")
            arDias = new Array();
        else
            arDias = this.hfDiasSelecionados.value.toString().split(",");

        var i = Array.indexOf(arDias, String.format("{0:d4}/{1:d2}/{2:d2}", ano, mes, dia));

        if(i >= 0)
        {
            Array.removeAt(arDias, i);
        }
        else
        {
            Array.add(arDias, String.format("{0:d4}/{1:d2}/{2:d2}", ano, mes, dia));
        }
            
        this.hfDiasSelecionados.value = arDias.toString();

        if((_l !== undefined) && (_c !== undefined))
        {
            var td = this.FindControl("td" + _l.toString() + _c.toString());
            if(this.hfStyleDiaSelecionado.value != "")
                td.className = this.hfStyleDiaSelecionado.value;
            else
                td.style["color"] = "#FF0000";
        }
        
        if((ano == this.ano) && (mes == this.mes))
            this._renderFolha(new Date(this.ano, this.mes, this.dia));
    
    },
    
    _renderFolha: function(data)
    {

        var arDias;
        if(this.hfDiasSelecionados.value.trim() == "")
            arDias = new Array();
        else
            arDias = this.hfDiasSelecionados.value.toString().split(",");

        var a = data;
        var dia = 1;
        var mes = a.getMonth();
        var ano = a.getFullYear();                
        var b = new Date(ano, mes, dia);
        var sem = b.getDay();
        var fdm = false;
      
        for(var l = 0; l < 6; l++)
        {
            for(var c = 0; c < 7; c++)
            {

                var td = this.FindControl("td" + l.toString() + c.toString());
                
                if((c == 0) || (c==6))
                {
                    if(this.hfStyleFimDeSemana.value != "")
                        td.className = this.hfStyleFimDeSemana.value;
                    else
                        td.style["color"] = "#00CC00";
                }
                else
                {
                    if(this.hfStyleDiaNormal.value != "")
                        td.className = this.hfStyleDiaNormal.value;
                    else
                        td.style["color"] = "#000000";
                }

                td.innerHTML = "&nbsp;";
                
                if( (c >= sem ) && (!fdm))                
                {

                    td.innerHTML = dia;
                    td.c = c;
                    td.l = l;

                    $clearHandlers(td);
                    this.addHandler(td, "click", this._selecionaDataClick);
                    td.c = c;
                    td.l = l;
                    
                    this.diasFolha[l][c] = dia;                    
                    
                    var hoje = new Date();
                    var i = Array.indexOf(arDias, String.format("{0:d4}/{1:d2}/{2:d2}", ano, mes, dia));
                    
                    if(i >= 0)
                    {
                        if(this.hfStyleDiaSelecionado.value != "")
                            td.className = this.hfStyleDiaSelecionado.value;
                        else
                            td.style["color"] = "#FF0000";
                    }
                    else if( (dia == hoje.getDate()) && (mes == hoje.getMonth()) && (ano == hoje.getFullYear()))
                    {
                        if(this.hfStyleDiaAtual.value != "")
                            td.className = this.hfStyleDiaAtual.value;
                        else
                            td.style["color"] = "#0000FF";
                    }
                    
                    dia++;
                    b = new Date(ano, mes, dia);
                    fdm = b.getMonth() != mes;
                }
            }
            sem = 0;
        }
        
        this.lblMes.innerHTML = this.meses[mes];
        this.lblAno.innerHTML = ano.toString().trim();        
    }   
    
}